Cuándo y cómo acudir al código fuente de EnergyPlus
por Germán Campos
por Germán Campos
Cuando trabajo en DesignBuilder hay 3 vías por las cuales resuelvo las dudas sobre cómo configurar un determinado elemento de mi modelo. El orden en el que acudo a ellas es:
La tercera vía es la más complicada pero, cada vez más a menudo, no me queda otra. A continuación os explico el proceso que sigo con un pequeño ejemplo.
Este caso es real y me sucedió modelando un sistema de colectores solares para ACS y apoyo a calefacción en DesignBuilder. Al editar los datos del colector solar te encuentras con una serie de parámetros asociados al modelo de colector. Concretamente:
A continuación nos pide los coeficientes de la ecuación de rendimiento del colector, algo que nos suena más. Sin embargo, la relación entre éstos y los parámetros anteriores no me queda clara.
Si acudimos a la ayuda, nos dice:
The gross area of the collector module (in m2 or ft2). This value is mainly for reference. The area of the associated solar collector surface is used in all calculations.
The volumetric flow rate during testing (m3/s or gal/min). If the value is available as flow rate per unit area, it is recommended to multiply by the Gross Area of the collector module, not the net aperture area.
This field specifies type of temperature used to develop the correlation equations. The testing procedure is based on an experimental correlation using either Inlet, Average or Outlet temperature. Enter one of these choices. The ASHRAE Standards 93 and 96 always use Inlet temperature.
Clarísimo.
Habitualmente tenemos los coeficientes de rendimiento del panel conforme a la norma EN 12975, ¿los metemos directamente? Vemos que el Test correlation type habla de temperaturas a la entrada, salida y promedio. Según la 12975 la ecuación de rendimiento se aplica con temperatura promedio. Al menos parece claro que el Tipo de correlación de prueba se debe cambiar a Promedio.
¿Y el Gross area y Test flow rate?
Vayamos al Engineering Reference a ver si nos dice algo más: Solar collectors
Vemos que nos explica la ecuación de rendimiento de primer y segundo orden y poco más. Nos quedamos sin saber el efecto de modificar el Gross area, el Test flow rate o Test correlation type.
Llegó la hora. Vayamos al código fuente. Uy, qué miedo.
Lo primero que tenemos que hacer es entrar a la plataforma Github, el gestor más utilizado actualmente en proyectos de código abierto: https://github.com/
A continuación buscamos Energyplus:
El primer resultado corresponde al repositorio donde encontramos el código fuente de Energyplus. Entramos allí:
Apareceremos en la pestaña <> Code, donde se nos mostrarán las carpetas en las que está distribuido el código fuente de Energyplus y sus herramientas auxiliares. El código principal está en la subcarpeta srcEnergyPlus y son ficheros con las extensiones .hh y .cc. Yo suelo echar un ojo a ambos tipos. El código principal se implementa en los .cc pero en los ficheros de encabezado .hh encontramos información útil para localizar ciertos parámetros.
En cualquier caso, tenemos la posibilidad de localizar por su nombre el fichero donde intuyamos que está el código del elemento que nos interesa o bien usar el buscador en la parte superior. Por ejemplo, si introducimos la palabra “collector”:
El primer resultado nos lleva directamente al fichero que nos interesa:
Visualizamos dicho fichero y buscamos algo como “efficiency”. Llegamos a:
De aquí sacamos que las variables eff0 y eff1 almacenan los coeficientes de rendimiento. Sigamos la pista ahora eff0 (buscando eff0 en la página del navegador CTRL+F).
Llegamos a una región del código con contenido interesante, con líneas como:
Fragmento 1: nos da idea de qué representa cada variable
Real64 Cp; // Specific heat of collector fluid (J/kg-K)
Real64 Area; // Gross area of collector (m2)
Real64 mCpATest; // = MassFlowRateTest * Cp / Area (tested area)
Real64 mCpA; // = MassFlowRate * Cp / Area
Real64 TestTypeMod; // Modifier for test correlation type: INLET, AVERAGE, or OUTLET
Real64 FlowMod; // Modifier for flow rate different from test flow rate
Real64 FRULpTest; // FR * ULoss “prime” for test conditions = (eff1 + eff2 * deltaT)
Real64 FpULTest; // F prime * ULoss for test conditions = collector efficiency factor * overall loss coefficient
Real64 FRTAN; // FR * tau * alpha at normal incidence = Y-intercept of collector efficiency
Real64 FRUL; // FR * ULoss = 1st order coefficient of collector efficiency
Real64 FRULT; // FR * ULoss / T = 2nd order coefficent of collector efficiency
Real64 Q; // Heat gain or loss to collector fluid (W)
Real64 Efficiency; // Thermal efficiency of solar energy conversion
Fragmento 2: mCpATest incluye el Gross Area y el Test flow rate
mCpATest = Parameters( ParamNum ).TestMassFlowRate * Cp / Parameters( Collector( CollectorNum ).Parameters ).Area;
Fragmento 3: si trabajamos con promedio se modifica la correlación con el TestTypeMod.
if ( SELECT_CASE_var == AVERAGE ) {
FRULpTest = Parameters( ParamNum ).eff1 + Parameters( ParamNum ).eff2 * ( ( InletTemp + OutletTemp ) * 0.5 – Surface( SurfNum ).OutDryBulbTemp );
TestTypeMod = 1.0 / ( 1.0 – FRULpTest / ( 2.0 * mCpATest ) );
FRULpTest *= TestTypeMod;
Fragmento 4: se calcula una coeficiente de corrección para caudales diferentes al ensayado
if ( ( 1.0 + FRULpTest / mCpATest ) > 0.0 ) {
FpULTest = –mCpATest * std::log( 1.0 + FRULpTest / mCpATest );
} else {
FpULTest = FRULpTest; // Avoid LOG( <0 )
}
if ( ( -FpULTest / mCpA ) < 700.0 ) {
FlowMod = mCpA * ( 1.0 – std::exp( -FpULTest / mCpA ) );
} else { // avoid EXP(too large #)
//FlowMod = FlowMod; // Self-assignment commented out
}
if ( ( -FpULTest / mCpATest ) < 700.0 ) {
FlowMod /= ( mCpATest * ( 1.0 – std::exp( -FpULTest / mCpATest ) ) );
} else {
//FlowMod = FlowMod; // Self-assignment commented out
}
Fragmento 5: se calcula la ganancia y la temperatura de salida.
// Calculate fluid heat gain (or loss)
// Heat loss is possible if there is no incident radiation and fluid is still flowing.
Q = ( FRTAN * IncidentAngleModifier * QRadSWOutIncident( SurfNum ) + FRULpTest * ( InletTemp – Surface( SurfNum ).OutDryBulbTemp ) ) * Area * FlowMod;
OutletTemp = InletTemp + Q / ( MassFlowRate * Cp );
Sin entrar al detalle podemos observar cómo los parámetros Gross Area y Test flow rate repercuten en la corrección de la ecuación de eficiencia cuando se calcula para temperatura promedio (en vez de temperatura de entrada) y también afectan al coeficiente de corrección del caudal FlowMod que se aplica internamente.
En resumen, los parámetros de referencia del colector son relevantes.
No nos serviría coger cualquier panel de la librería de DesignBuilder y cambiar únicamente la ecuación de rendimiento. Tendremos que copiar un componente y modificar su Area bruta, su caudal de prueba y el tipo de correlación a Promedio.
Este es un ejemplo, relativamente sencillo, en el que investigamos el código fuente de EnergyPlus para resolver nuestras dudas. Casos más complejos requieren revisar más de un fichero y en ocasiones seguir la pista al código puede ser realmente complicado.
Te recomiendo que eches un ojo a algún componente que te parezca interesante para ver cómo es el código por dentro. Al menos para quitarte el miedo a llegar tan lejos… Está claro que si sabes programar, te resultará más sencillo todo el proceso, pero aún sin saberlo, seguro que sacas algo de provecho.
¡Ya me contarás!
Dejar un comentario
¿Quieres unirte a la conversación?Siéntete libre de contribuir!