network/capbank.cpp

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

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