PROGRAM ModeloExplicitoPV
IMPLICIT NONE
! --- Declaración de Variables ---
! Parámetros del módulo (Datos de entrada)
REAL :: Isc, Voc, Im, Vm
! Constantes del modelo
REAL :: C1, C2
! Variables para el bucle de la curva
REAL :: V, I
INTEGER :: k, num_puntos
REAL :: paso_v
! --- 1. Definición de Parámetros (Ejemplo 1: Isophoton) ---
! Estos valores corresponden a la Sección "Example 1" del paper
Isc = 16.8e-3 ! Corriente de Cortocircuito (A)
Voc = 2.63 ! Voltaje de Circuito Abierto (V)
Im = 16.0e-3 ! Corriente en Máxima Potencia (A)
Vm = 2.29 ! Voltaje en Máxima Potencia (V)
WRITE(*,*) "------------------------------------------------"
WRITE(*,*) " SIMULACION DEL MODELO EXPLICITO (SEC 2.1) "
WRITE(*,*) "------------------------------------------------"
WRITE(*,*) "Parametros de entrada:"
WRITE(*,*) "Isc =", Isc, "A"
WRITE(*,*) "Voc =", Voc, "V"
WRITE(*,*) "Im =", Im, "A"
WRITE(*,*) "Vm =", Vm, "V"
WRITE(*,*) ""
! --- 2. Cálculo de Constantes Intermedias ---
! Cálculo de C2
! Fórmula: C2 = ((Vm/Voc) - 1) / ln(1 - Im/Isc)
! Nota: LOG() en Fortran es el logaritmo natural
C2 = ((Vm / Voc) - 1.0) / LOG(1.0 - (Im / Isc))
! Cálculo de C1
! Fórmula: C1 = (1 - Im/Isc) * exp(-Vm / (C2 * Voc))
C1 = (1.0 - (Im / Isc)) * EXP(-Vm / (C2 * Voc))
WRITE(*,*) "Constantes calculadas:"
WRITE(*,*) "C2 =", C2
WRITE(*,*) "C1 =", C1
WRITE(*,*) ""
! --- 3. Generación de la Serie de Puntos (Curva I-V) ---
! Generaremos 21 puntos desde 0V hasta Voc
num_puntos = 20
paso_v = Voc / REAL(num_puntos)
WRITE(*,*) "------------------------------------------------"
WRITE(*,*) " TABLA DE RESULTADOS (CURVA I-V FIG. 3) "
WRITE(*,*) "------------------------------------------------"
WRITE(*,*) "Voltaje (V) Corriente (I)"
WRITE(*,*) "----------- -------------"
DO k = 0, num_puntos
! Calcular voltaje actual
V = REAL(k) * paso_v
! Ecuación Principal (Eq. 1 del artículo):
! I = Isc * [ 1 - C1 * ( exp( V / (C2 * Voc) ) - 1 ) ]
! Desglose para claridad y evitar overflow numérico si V es muy alto
IF (V > Voc) THEN
I = 0.0
ELSE
I = Isc * (1.0 - C1 * (EXP(V / (C2 * Voc)) - 1.0))
END IF
! Corrección física: La corriente no puede ser negativa
IF (I < 0.0) I = 0.0
! Imprimir con formato (F10.2 para voltaje, F10.4 para corriente)
WRITE(*, '(F10.2, T20, F10.4)') V, I
END DO
WRITE(*,*) "------------------------------------------------"
END PROGRAM ModeloExplicitoPV
To embed this program on your website, copy the following code and paste it into your website's HTML: