Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- SUBROUTINE Band_Relaxation_Method(Mat_Coeficientes, Mat_Independiente, Resultados, Extension)
- REAL(kind=real64),PARAMETER:: Relax_Coef=1.95_real64 !Este valor va a ser problema dependiente, por lo que hay que cambiarlo por el valor adecuado en cada caso
- INTEGER, INTENT(IN):: Extension
- REAL(kind=real64), DIMENSION(Extension,2*Banda+1), INTENT(IN)::Mat_Coeficientes
- REAL(kind=real64), DIMENSION(Extension), INTENT(IN):: Mat_Independiente
- REAL(kind=real64), DIMENSION(Extension), INTENT(INOUT):: Resultados
- REAL(kind=real64), DIMENSION(Extension):: Resultados_Old
- LOGICAL:: Error
- INTEGER:: Ini,Fin
- INTEGER:: I,J !Variables de control
- REAL(kind=real64):: Suma
- ERROR = .TRUE.
- Resultados_Old = Resultados
- DO WHILE(Error)
- DO I=1,Extension
- Suma=0.0_real64
- DO J = -Banda, -1, 1
- Ini=max(i+j,1) !Variable de control para out_of_bounds extremo superior izquierdo de la matriz
- Suma=Suma+Mat_Coeficientes(i,(Banda+1)+j)*Resultados(Ini) !Sumatoria desde el valor mas a la izquierda de la banda hasta uno antes de la diagonal principal
- END DO
- DO J = 1, Banda, 1
- Fin=min(Extension,i+j) !Variable de control para out_of_bounds extremo inferior derecho de la matriz
- Suma=Suma+Mat_Coeficientes(i,(Banda+1)+j)*Resultados(Fin) !Sumatoria desde el valor siguiente a la diagonal principal hasta el final de la banda
- END DO
- Resultados(i) =(1.0_real64-Relax_Coef)*Resultados_Old(i) + Relax_Coef*(Mat_Independiente(i)-Suma)/Mat_Coeficientes(i,Banda+1)
- END DO
- CALL Check_Error(Resultados,Resultados_Old,Error,Extension)
- Resultados_Old=Resultados
- END DO
- END SUBROUTINE Band_Relaxation_Method
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement