@@ -646,27 +646,96 @@ fmiStatus fmiSetTime(fmiComponent c, fmiReal time) {
646646}
647647
648648fmiStatus fmiSetContinuousStates (fmiComponent c , const fmiReal x [], size_t nx ) {
649- // TODO Write code here
649+ ModelInstance * comp = (ModelInstance * )c ;
650+ int i ;
651+ if (invalidState (comp , "fmiSetContinuousStates" , modelStepping ))
652+ return fmiError ;
653+ if (invalidNumber (comp , "fmiSetContinuousStates" , "nx" , nx , NUMBER_OF_STATES ))
654+ return fmiError ;
655+ if (nullPointer (comp , "fmiSetContinuousStates" , "x[]" , x ))
656+ return fmiError ;
657+ #if NUMBER_OF_REALS > 0
658+ for (i = 0 ; i < nx ; i ++ ) {
659+ fmiValueReference vr = vrStates [i ];
660+ FILTERED_LOG (comp , fmiOK , LOG_FMI_CALL , "fmiSetContinuousStates: #r%d#=%.16g" , vr , x [i ])
661+ assert (vr >= 0 && vr < NUMBER_OF_REALS );
662+ if (setReal (comp , vr , x [i ]) != fmiOK ) // to be implemented by the includer of this file
663+ return fmiError ;
664+ }
665+ #endif
650666 return fmiOK ;
651667}
652668
653669fmiStatus fmiGetDerivatives (fmiComponent c , fmiReal derivatives [], size_t nx ) {
654- // TODO Write code here
670+ int i ;
671+ ModelInstance * comp = (ModelInstance * )c ;
672+ if (invalidState (comp , "fmiGetDerivatives" , modelInitialized |modelStepping |modelTerminated ))
673+ return fmiError ;
674+ if (invalidNumber (comp , "fmiGetDerivatives" , "nx" , nx , NUMBER_OF_STATES ))
675+ return fmiError ;
676+ if (nullPointer (comp , "fmiGetDerivatives" , "derivatives[]" , derivatives ))
677+ return fmiError ;
678+ #if NUMBER_OF_STATES > 0
679+ for (i = 0 ; i < nx ; i ++ ) {
680+ fmiValueReference vr = vrStates [i ] + 1 ;
681+ derivatives [i ] = getReal (comp , vr ); // to be implemented by the includer of this file
682+ FILTERED_LOG (comp , fmiOK , LOG_FMI_CALL , "fmiGetDerivatives: #r%d# = %.16g" , vr , derivatives [i ])
683+ }
684+ #endif
655685 return fmiOK ;
656686}
657687
658688fmiStatus fmiGetEventIndicators (fmiComponent c , fmiReal eventIndicators [], size_t nx ) {
659- // TODO Write code here
689+ int i ;
690+ ModelInstance * comp = (ModelInstance * )c ;
691+ if (invalidState (comp , "fmiGetEventIndicators" , modelInitialized |modelStepping |modelTerminated ))
692+ return fmiError ;
693+ if (invalidNumber (comp , "fmiGetEventIndicators" , "nx" , nx , NUMBER_OF_EVENT_INDICATORS ))
694+ return fmiError ;
695+ #if NUMBER_OF_EVENT_INDICATORS > 0
696+ /* eval needed equations*/
697+ comp -> fmuData -> callback -> function_ZeroCrossingsEquations (comp -> fmuData );
698+ comp -> fmuData -> callback -> function_ZeroCrossings (comp -> fmuData ,comp -> fmuData -> simulationInfo .zeroCrossings );
699+ for (i = 0 ; i < ni ; i ++ ) {
700+ eventIndicators [i ] = comp -> fmuData -> simulationInfo .zeroCrossings [i ];
701+ FILTERED_LOG (comp , fmiOK , LOG_FMI_CALL , "fmiGetEventIndicators: z%d = %.16g" , i , eventIndicators [i ])
702+ }
703+ #endif
660704 return fmiOK ;
661705}
662706
663707fmiStatus fmiGetContinuousStates (fmiComponent c , fmiReal x [], size_t nx ) {
664- // TODO Write code here
708+ int i ;
709+ ModelInstance * comp = (ModelInstance * )c ;
710+ if (invalidState (comp , "fmiGetContinuousStates" , modelInitialized |modelStepping |modelTerminated ))
711+ return fmiError ;
712+ if (invalidNumber (comp , "fmiGetContinuousStates" , "nx" , nx , NUMBER_OF_STATES ))
713+ return fmiError ;
714+ if (nullPointer (comp , "fmiGetContinuousStates" , "states[]" , x ))
715+ return fmiError ;
716+ #if NUMBER_OF_REALS > 0
717+ for (i = 0 ; i < nx ; i ++ ) {
718+ fmiValueReference vr = vrStates [i ];
719+ x [i ] = getReal (comp , vr ); // to be implemented by the includer of this file
720+ FILTERED_LOG (comp , fmiOK , LOG_FMI_CALL , "fmiGetContinuousStates: #r%u# = %.16g" , vr , x [i ])
721+ }
722+ #endif
665723 return fmiOK ;
666724}
667725
668726fmiStatus fmiGetNominalsOfContinuousStates (fmiComponent c , fmiReal x_nominal [], size_t nx ) {
669- // TODO Write code here
727+ int i ;
728+ ModelInstance * comp = (ModelInstance * )c ;
729+ if (invalidState (comp , "fmiGetNominalsOfContinuousStates" , modelInstantiated |modelInitialized |modelStepping |modelTerminated ))
730+ return fmiError ;
731+ if (invalidNumber (comp , "fmiGetNominalsOfContinuousStates" , "nx" , nx , NUMBER_OF_STATES ))
732+ return fmiError ;
733+ if (nullPointer (comp , "fmiGetNominalsOfContinuousStates" , "x_nominal[]" , x_nominal ))
734+ return fmiError ;
735+ x_nominal [0 ] = 1 ;
736+ FILTERED_LOG (comp , fmiOK , LOG_FMI_CALL , "fmiGetNominalsOfContinuousStates: x_nominal[0..%d] = 1.0" , nx - 1 )
737+ for (i = 0 ; i < nx ; i ++ )
738+ x_nominal [i ] = 1 ;
670739 return fmiOK ;
671740}
672741
0 commit comments