network/transformer.cpp

00001 
00009 #include <stdlib.h>
00010 #include <stdio.h>
00011 #include <errno.h>
00012 #include <math.h>
00013 #include "network.h"
00014 
00015 
00016 
00017 
00019 // transformer CLASS FUNCTIONS
00021 CLASS* transformer::oclass = NULL;
00022 CLASS* transformer::pclass = NULL;
00023 transformer *transformer::defaults = NULL;
00024 
00025 transformer::transformer(MODULE *mod) : link(mod)
00026 {
00027     // first time init
00028     if (oclass==NULL)
00029     {
00030         // register the class definition
00031         transformer_class = oclass = gl_register_class(mod,"transformer",PC_BOTTOMUP);
00032         if (oclass==NULL)
00033             GL_THROW("unable to register object class implemented by %s",__FILE__);
00034 
00035         // publish the class properties
00036         if (gl_publish_variable(oclass,
00037             PT_enumeration,"Type",PADDR(Type),
00038                 PT_KEYWORD,"TT_YY",TT_YY,
00039                 PT_KEYWORD,"TT_YD",TT_YD,
00040                 PT_KEYWORD,"TT_DY",TT_DY,
00041                 PT_KEYWORD,"TT_DD",TT_DD,
00042             PT_double, "Sbase", PADDR(Sbase),
00043             PT_double, "Vbase", PADDR(Vbase),
00044             PT_double, "Zpu", PADDR(Zpu),
00045             PT_double, "Vprimary", PADDR(Vprimary),
00046             PT_double, "Vsecondary", PADDR(Vsecondary),
00047             NULL)<1) GL_THROW("unable to publish properties in %s",__FILE__);
00048 
00049         // setup the default values
00050         defaults = this;
00051     }
00052 }
00053 
00054 int transformer::create() 
00055 {
00056     int result = link::create();
00057     memcpy(this,defaults,sizeof(*this));
00058     return result;
00059 }
00060 
00061 TIMESTAMP transformer::sync(TIMESTAMP t0) 
00062 {
00063     node *f = OBJECTDATA(from,node);
00064     node *t = OBJECTDATA(to,node);
00065     if (f==NULL || t==NULL)
00066         return TS_NEVER;
00067     // TODO: update transformer state
00068     return link::sync(t0);
00069 }
00071 // IMPLEMENTATION OF CORE LINKAGE: transformer
00073 
00074 EXPORT int create_transformer(OBJECT **obj, OBJECT *parent)
00075 {
00076     *obj = gl_create_object(transformer_class,sizeof(transformer));
00077     if (*obj!=NULL)
00078     {
00079         transformer *my = OBJECTDATA(*obj,transformer);
00080         gl_set_parent(*obj,parent);
00081         my->create();
00082         return 1;
00083     }
00084     return 0;
00085 }
00086 
00087 EXPORT TIMESTAMP sync_transformer(OBJECT *obj, TIMESTAMP t0)
00088 {
00089     TIMESTAMP t1 = OBJECTDATA(obj,transformer)->sync(t0);
00090     obj->clock = t0;
00091     return t1;
00092 }
00093 

GridLAB-DTM Version 1.0
An open-source project initiated by the US Department of Energy