Added support to analog functions on ADMS models
This commit is contained in:
parent
bcc4a11dfc
commit
4307188300
|
|
@ -253,19 +253,27 @@
|
|||
<admst:when test="[name='ln']"><admst:return name="fname" value="logE"/></admst:when>
|
||||
<admst:when test="[name='limexp']"><admst:return name="fname" value="limexp"/></admst:when>
|
||||
<admst:when test="[name='\$limexp']"><admst:return name="fname" value="limexp"/></admst:when>
|
||||
<admst:otherwise><admst:return name="fname" value="%(name)"/></admst:otherwise>
|
||||
</admst:choose>
|
||||
</admst:template>
|
||||
<admst:template match="fname">
|
||||
<admst:choose>
|
||||
<admst:when test="[name='abs']">fabs</admst:when>
|
||||
<admst:when test="[name='\$shrinkl']">shrinkl</admst:when>
|
||||
<admst:when test="[name='\$shrinka']">shrinka</admst:when>
|
||||
<admst:when test="[name='log']">log10</admst:when>
|
||||
<admst:when test="[name='ln']">logE</admst:when>
|
||||
<admst:when test="[name='limexp']">limexp</admst:when>
|
||||
<admst:when test="[name='\$limexp']">limexp</admst:when>
|
||||
<admst:otherwise>%(name)</admst:otherwise>
|
||||
|
||||
<admst:when test="[name='hypot']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='max']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='min']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='pow']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='div']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='mult']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='add']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='cos']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='sin']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='tan']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='cosh']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='sinh']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='tanh']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='acos']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='asin']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='atan']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='sqrt']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='exp']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
|
||||
<admst:otherwise><admst:return name="fname" value="$(module)_%(name)"/></admst:otherwise>
|
||||
</admst:choose>
|
||||
</admst:template>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
<!--
|
||||
Written by Laurent Lemaitre - r29173@users.sourceforge.net
|
||||
Written by Francesc Vila - francesc.vila@gmail.com
|
||||
Documentation:
|
||||
http://sourceforge.net/docman/display_doc.php?docid=18993&group_id=84289
|
||||
Target Interface: ngspice
|
||||
|
|
@ -23,7 +23,55 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|||
<!DOCTYPE admst SYSTEM "admst.dtd">
|
||||
<admst version="2.3.0" xmlns:admst="http://mot-adms.sourceforge.net/xml-files/admst">
|
||||
|
||||
<admst:template match="c:analogfunction:math_h">
|
||||
<admst:template match="c:analogfunction:math">
|
||||
#undef _cos
|
||||
#undef _d0_cos
|
||||
#undef _sin
|
||||
#undef _d0_sin
|
||||
#undef _tan
|
||||
#undef _d0_tan
|
||||
#undef _cosh
|
||||
#undef _d0_cosh
|
||||
#undef _sinh
|
||||
#undef _d0_sinh
|
||||
#undef _tanh
|
||||
#undef _d0_tanh
|
||||
#undef _acos
|
||||
#undef _d0_acos
|
||||
#undef _asin
|
||||
#undef _d0_asin
|
||||
#undef _atan
|
||||
#undef _d0_atan
|
||||
#undef _logE
|
||||
#undef _d0_logE
|
||||
#undef _log10
|
||||
#undef _d0_log10
|
||||
#undef _exp
|
||||
#undef _d0_exp
|
||||
#undef _sqrt
|
||||
#undef _d0_sqrt
|
||||
#undef _abs
|
||||
#undef _d0_abs
|
||||
|
||||
#undef _hypot
|
||||
#undef _d0_hypot
|
||||
#undef _d1_hypot
|
||||
|
||||
#undef _min
|
||||
#undef _d0_min
|
||||
#undef _d1_min
|
||||
|
||||
#undef _max
|
||||
#undef _d0_max
|
||||
#undef _d1_max
|
||||
|
||||
#undef _pow
|
||||
#undef _d0_pow
|
||||
#undef _d1_pow
|
||||
|
||||
#undef _limexp
|
||||
#undef _d_limexp
|
||||
|
||||
static inline double _cos(double arg) { return cos(arg); }
|
||||
static inline double _d0_cos(double arg) { return (-sin(arg)); }
|
||||
static inline double _sin(double arg) { return sin(arg); }
|
||||
|
|
@ -857,3 +905,109 @@ static inline double _d1_pow(double x,double y) { return (x==0.0)?0.0:((lo
|
|||
</admst:otherwise>
|
||||
</admst:choose>
|
||||
</admst:template>
|
||||
|
||||
<admst:template match="code">
|
||||
<admst:value-of select="attribute[name='ngspicename']/value"/>
|
||||
<admst:variable name="module" select="%s"/>
|
||||
|
||||
#include "ngspice/ngspice.h"
|
||||
#include "$(module)analogfunction.h"
|
||||
|
||||
<admst:apply-templates select="." match="c:analogfunction:math" />
|
||||
|
||||
<admst:for-each select="/module/analogfunction">
|
||||
<admst:value-of select="." />
|
||||
<admst:variable name="globalanalogfunction" select="%p" />
|
||||
<admst:value-of select="name" />
|
||||
<admst:variable name="function" select="%s" />
|
||||
<admst:apply-templates select="." match="dectype" />$(module)_$function(
|
||||
<admst:join select="variable[input='yes']" separator=",">
|
||||
<admst:value-of select="name" />
|
||||
<admst:apply-templates select="." match="dectype"/>
|
||||
<admst:text format="%s" />
|
||||
</admst:join>)
|
||||
<admst:text format="\n{\n" />
|
||||
<admst:text format="double $function=0.0;\n"/>
|
||||
<admst:for-each select="variable[input='no' and output='no']">
|
||||
<admst:value-of select="name"/>
|
||||
<admst:apply-templates select="." match="dectype"/>
|
||||
<admst:text format="%s"/>
|
||||
<admst:if test="[type='integer']">=0</admst:if>
|
||||
<admst:if test="[type='real']">=0.0</admst:if>
|
||||
<admst:text format=";\n"/>
|
||||
</admst:for-each>
|
||||
<admst:apply-templates select="tree" match="af:print">
|
||||
<admst:value-of select="returned('x')/value"/>
|
||||
<admst:text format="%s"/>
|
||||
</admst:apply-templates>
|
||||
<admst:text format="\nreturn $function;\n}\n" />
|
||||
|
||||
double d_$(module)_$(function)(
|
||||
<admst:join select="variable[input='yes']" separator=",">
|
||||
<admst:value-of select="name" />
|
||||
<admst:apply-templates select="." match="dectype"/>
|
||||
<admst:text format="%s" />
|
||||
</admst:join>,
|
||||
<admst:join select="variable[input='yes']" separator=",">
|
||||
<admst:value-of select="name" />
|
||||
<admst:apply-templates select="." match="dectype"/>
|
||||
<admst:text format="d_%s" />
|
||||
</admst:join>)
|
||||
<admst:text format="\n{\n" />
|
||||
|
||||
<admst:text format="double $function=0.0;\n"/>
|
||||
<admst:for-each select="$globalanalogfunction/variable[input='yes']">
|
||||
<admst:value-of select="name"/>
|
||||
<admst:variable name="ddx" select="%s"/>
|
||||
<admst:text format="double $(function)_$(ddx)=0.0;\n"/>
|
||||
</admst:for-each>
|
||||
<admst:for-each select="variable[input='no' and output='no']">
|
||||
<admst:value-of select="name"/>
|
||||
<admst:variable name="name" select="%s"/>
|
||||
<admst:apply-templates select="." match="dectype"/>
|
||||
<admst:text format=" $(name)"/>
|
||||
<admst:if test="[type='integer']">=0</admst:if>
|
||||
<admst:if test="[type='real']">=0.0</admst:if>
|
||||
<admst:text format=";\n"/>
|
||||
<admst:for-each select="$globalanalogfunction/variable[input='yes']">
|
||||
<admst:value-of select="name"/>
|
||||
<admst:variable name="ddx" select="%s"/>
|
||||
<admst:apply-templates select="." match="dectype"/>
|
||||
<admst:text format=" $(name)_$(ddx)"/>
|
||||
<admst:if test="[type='integer']">=0</admst:if>
|
||||
<admst:if test="[type='real']">=0.0</admst:if>
|
||||
<admst:text format=";\n"/>
|
||||
</admst:for-each>
|
||||
</admst:for-each>
|
||||
<admst:apply-templates select="tree" match="af:print:derivate">
|
||||
<admst:value-of select="returned('x')/value"/>
|
||||
<admst:text format="%s"/>
|
||||
</admst:apply-templates>
|
||||
<admst:text format="\nreturn "/>
|
||||
<admst:join select="$globalanalogfunction/variable[input='yes']" separator="+">
|
||||
<admst:value-of select="name"/>
|
||||
<admst:value-of select="name"/>
|
||||
<admst:text format="$(function)_%s*d_%s"/>
|
||||
</admst:join>
|
||||
<admst:text format=";\n"/>
|
||||
<admst:text format="}"/>
|
||||
</admst:for-each>
|
||||
</admst:template>
|
||||
|
||||
<admst:variable name="globalanalogfunction" />
|
||||
|
||||
<admst:for-each select="/module">
|
||||
<admst:value-of select="attribute[name='ngspicename']/value" />
|
||||
<admst:open file="%sanalogfunction.c">
|
||||
<admst:value-of select="/simulator/package_string" />
|
||||
<admst:text format="/***\n*** Interface: %s\n" />
|
||||
<admst:value-of select="/simulator/currentdate" />
|
||||
<admst:value-of select="/simulator/fullname" />
|
||||
<admst:text format=" *** created by: %s - %s ***/\n" />
|
||||
<admst:apply-templates select="." match="code" />
|
||||
</admst:open>
|
||||
<admst:value-of select="attribute[name='ngspicename']/value" />
|
||||
<admst:message format="%sanalogfunction.c: file created\n" />
|
||||
</admst:for-each>
|
||||
|
||||
</admst>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,92 @@
|
|||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
<!--
|
||||
Written by Francesc Vila - francesc.vila@gmail.com
|
||||
Documentation:
|
||||
http://sourceforge.net/docman/display_doc.php?docid=18993&group_id=84289
|
||||
Target Interface: ngspice
|
||||
Supported by adms-1.x.x
|
||||
This file is used by adms - http://sourceforge.net/projects/mot-adms.
|
||||
adms is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
adms is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with adms; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
-->
|
||||
|
||||
<!DOCTYPE admst SYSTEM "admst.dtd">
|
||||
<admst version="2.3.0" xmlns:admst="http://mot-adms.sourceforge.net/xml-files/admst">
|
||||
|
||||
<admst:template match="dectype">
|
||||
<admst:choose>
|
||||
<admst:when test="[type='real']">
|
||||
<admst:text format="double " />
|
||||
</admst:when>
|
||||
<admst:when test="[type='integer']">
|
||||
<admst:text format="int " />
|
||||
</admst:when>
|
||||
<admst:otherwise>
|
||||
<admst:text format="char* " />
|
||||
</admst:otherwise>
|
||||
</admst:choose>
|
||||
</admst:template>
|
||||
|
||||
<admst:template match="code">
|
||||
<admst:value-of select="attribute[name='ngspicename']/value" />
|
||||
<admst:variable name="module" select="%s" />
|
||||
|
||||
#ifndef $(module)analogfunction
|
||||
#define $(module)analogfunction
|
||||
|
||||
<admst:for-each select="analogfunction">
|
||||
<admst:value-of select="name" />
|
||||
<admst:variable name="function" value="%s" />
|
||||
<admst:apply-templates select="." match="dectype" />
|
||||
<admst:text format="$(module)_$function(" />
|
||||
<admst:join select="variable[input='yes']" separator=", ">
|
||||
<admst:value-of select="name"/>
|
||||
<admst:apply-templates select="." match="dectype" />
|
||||
<admst:text format="%s"/>
|
||||
</admst:join>
|
||||
<admst:text format=");\n" />
|
||||
<admst:apply-templates select="." match="dectype" />
|
||||
<admst:text format="d_$(module)_$function(" />
|
||||
<admst:join select="variable[input='yes']" separator=", ">
|
||||
<admst:value-of select="name"/>
|
||||
<admst:apply-templates select="." match="dectype" />
|
||||
<admst:text format="%s"/>
|
||||
</admst:join>
|
||||
<admst:text format="," />
|
||||
<admst:join select="variable[input='yes']" separator=", ">
|
||||
<admst:value-of select="name"/>
|
||||
<admst:apply-templates select="." match="dectype" />
|
||||
<admst:text format="d_%s"/>
|
||||
</admst:join>
|
||||
<admst:text format=");\n" />
|
||||
</admst:for-each>
|
||||
|
||||
#endif /* $(module)analogfunction */
|
||||
|
||||
</admst:template>
|
||||
|
||||
<admst:for-each select="/module">
|
||||
<admst:value-of select="attribute[name='ngspicename']/value" />
|
||||
<admst:open file="%sanalogfunction.h">
|
||||
<admst:value-of select="/simulator/package_string" />
|
||||
<admst:text format="/***\n*** Interface: %s\n" />
|
||||
<admst:value-of select="/simulator/currentdate" />
|
||||
<admst:value-of select="/simulator/fullname" />
|
||||
<admst:text format=" *** created by: %s - %s ***/\n" />
|
||||
<admst:apply-templates select="." match="code" />
|
||||
</admst:open>
|
||||
<admst:value-of select="attribute[name='ngspicename']/value" />
|
||||
<admst:message format="%sanalogfunction.h: file created\n" />
|
||||
</admst:for-each>
|
||||
|
||||
</admst>
|
||||
|
|
@ -319,7 +319,7 @@ typedef struct s$(module)model { /* model structure */
|
|||
|
||||
#include "$(module)ext.h"
|
||||
<admst:if test="[not(nilled(analogfunction))]">
|
||||
#include "analogfunction.h"
|
||||
#include "$(module)analogfunction.h"
|
||||
</admst:if>
|
||||
|
||||
#endif /*$(module)*/
|
||||
|
|
|
|||
|
|
@ -37,7 +37,26 @@
|
|||
<admst:when test="[name='\$model']"><admst:return name="fname" value="_modelname"/></admst:when>
|
||||
<admst:when test="[name='\$instance']"><admst:return name="fname" value="_instancename"/></admst:when>
|
||||
<admst:when test="[name='\$temperature']"><admst:return name="fname" value="_circuit_temp"/></admst:when>
|
||||
<admst:otherwise><admst:return name="fname" value="%(name)"/></admst:otherwise>
|
||||
|
||||
<admst:when test="[name='hypot']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='max']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='min']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='pow']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='mult']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='add']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='cos']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='sin']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='tan']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='cosh']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='sinh']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='tanh']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='acos']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='asin']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='atan']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='sqrt']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
<admst:when test="[name='exp']"><admst:return name="fname" value="%(name)" /></admst:when>
|
||||
|
||||
<admst:otherwise><admst:return name="fname" value="$(module)_%(name)"/></admst:otherwise>
|
||||
</admst:choose>
|
||||
</admst:template>
|
||||
|
||||
|
|
|
|||
|
|
@ -54,7 +54,9 @@ BUILT_SOURCES = \\
|
|||
$(module)pzld.c \\
|
||||
$(module)setup.c \\
|
||||
$(module)temp.c \\
|
||||
$(module)trunc.c
|
||||
$(module)trunc.c \\
|
||||
$(module)analogfunction.h \\
|
||||
$(module)analogfunction.c
|
||||
|
||||
lib$(module)_la_SOURCES = \\
|
||||
\$(BUILT_SOURCES)
|
||||
|
|
@ -84,7 +86,7 @@ DISTCLEANFILES = Makefile.am \\
|
|||
\%.c \%.hxx \\
|
||||
\%acld.c \%ask.c \%defs.h \%del.c \%dest.c \%ext.h \%guesstopology.c \\
|
||||
\%init.c \%init.h \%itf.h \%load.c \%mask.c \%mdel.c \%mpar.c \%par.c \\
|
||||
\%pzld.c \%setup.c \%temp.c \%trunc.c \\
|
||||
\%pzld.c \%setup.c \%temp.c \%trunc.c \%analogfunction.h \%analogfunction.c \\
|
||||
: \$(srcdir)/admsva/\%.va \\
|
||||
\$(ADMSXMLINTERFACE)/ngspiceVersion.xml \\
|
||||
\$(ADMSXMLINTERFACE)/ngspiceMODULEitf.h.xml \\
|
||||
|
|
@ -108,7 +110,9 @@ DISTCLEANFILES = Makefile.am \\
|
|||
\$(ADMSXMLINTERFACE)/ngspiceMODULEnoise.c.xml \\
|
||||
\$(ADMSXMLINTERFACE)/ngspiceMODULEguesstopology.c.xml \\
|
||||
\$(ADMSXMLINTERFACE)/ngspiceMODULE.hxx.xml \\
|
||||
\$(ADMSXMLINTERFACE)/ngspiceMODULE.c.xml
|
||||
\$(ADMSXMLINTERFACE)/ngspiceMODULE.c.xml \\
|
||||
\$(ADMSXMLINTERFACE)/ngspiceMODULEanalogfunction.h.xml \\
|
||||
\$(ADMSXMLINTERFACE)/ngspiceMODULEanalogfunction.c.xml
|
||||
admsXml -I\$(srcdir) -I\$(srcdir)/admsva \$< \\
|
||||
-e \$(ADMSXMLINTERFACE)/ngspiceVersion.xml \\
|
||||
-e \$(ADMSXMLINTERFACE)/ngspiceMODULEitf.h.xml \\
|
||||
|
|
@ -132,7 +136,9 @@ DISTCLEANFILES = Makefile.am \\
|
|||
-e \$(ADMSXMLINTERFACE)/ngspiceMODULEnoise.c.xml \\
|
||||
-e \$(ADMSXMLINTERFACE)/ngspiceMODULEguesstopology.c.xml \\
|
||||
-e \$(ADMSXMLINTERFACE)/ngspiceMODULE.hxx.xml \\
|
||||
-e \$(ADMSXMLINTERFACE)/ngspiceMODULE.c.xml
|
||||
-e \$(ADMSXMLINTERFACE)/ngspiceMODULE.c.xml \\
|
||||
-e \$(ADMSXMLINTERFACE)/ngspiceMODULEanalogfunction.h.xml \\
|
||||
-e \$(ADMSXMLINTERFACE)/ngspiceMODULEanalogfunction.c.xml
|
||||
|
||||
</admst:template>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue