Anuncio

Colapsar
No hay ningún anuncio todavía.

Radiacion cuerpo negro

Colapsar
X
 
  • Filtro
  • Hora
  • Mostrar
Borrar todo
nuevos mensajes

  • Fortran Radiacion cuerpo negro

    Saludos amigos, verán ...Intento hacer un programita que me calcule los puntos para la densidad de energía segun Planck, versus la longitud de onda a una temperatura absoluta de 3000K, éste es mi código:

    program cuerpo
    double precision E
    REAL::h,c,kb,T
    PARAMETER (h=6.6260755D-34)
    PARAMETER (c=2.99792458D8)
    PARAMETER (kb=1.38D-23)
    T=3000
    OPEN(UNIT=8,FILE='cuerpo.dat',ACTION='WRITE')
    do l=1,5,0.1
    E=((8*3.14*h*c)/(l**5))*((1)/(EXP((h*c)/(l*kb*T)))-1)
    WRITE(8,*) l,E
    end do
    close(8)
    end


    El cual me debería guardar los datos de y E en el archivo cuerpo.dat para despues graficarlos en GNUPLOT. Compilo y está bien, pero cuando ejecuto me salen éstos errores:

    Compiling Fortran...
    C:\Documents and Settings\Eduardo\Mis documentos\ddd.f90
    C:\Documents and Settings\Eduardo\Mis documentos\ddd.f90(1): error FOR3852: syntax error detected between ) and REAL
    C:\Documents and Settings\Eduardo\Mis documentos\ddd.f90(1): error FOR2934: lexical error: Invalid character
    C:\Documents and Settings\Eduardo\Mis documentos\ddd.f90(1): error FOR2934: lexical error: End of file in character context
    C:\Documents and Settings\Eduardo\Mis documentos\ddd.f90(1): error FOR1768: missing END statement or missing program unit (possibly free-form source in fixed-form file)
    Error executing fl32.exe.
    cuerponegro.exe - 4 error(s), 0 warning(s)


    ¿En que estoy fallando? ¿Todo está mal? Ayudenme por favor, tal vez estoy usando mal el PARAMETER.Uso Microsoft Fortran Powerstation 4.0 EN wINDOWS XP
    Gracias.

  • #2
    Re: Radiacion cuerpo negro

    Tengo entendido que en Fortran 90 para usar un parámetro tenemos que especificar el tipo de variable, en tu caso quedarían así:

    Real, parameter :: h=6.6260755D-34
    Real, parameter :: c=2.99792458D8
    Real, parameter :: kb=1.38D-23

    Otra cosa, para una variable de doble presicion, es la sintaxis siguiente:

    Real*8 :: E


    Ya que es una variable del tipo real, pero con doble presición, el *8 se refiere al espacio en memoria que se le asigna a esa variable con presición doble.

    Una cosa mas, al abrir un archivo (OPEN...) tenemos que especificar si dicho archivo ya existe o lo vamos a crear. Si ya existe, despues de Action: "Write", debe decir Status = "Old", si no existe, Status = "New". Cabe señalar que todo esto es en base a Fortran 90, tal vez la versio que utilizas es diferente y mis correcciones no vengan al caso, si es asi, esperemos que alguien mas nos ayude.


    Prueba con el siguiente código, donde supuse que el archivo de salida no existe y sera creado:

    Program cuerpo
    Real*8 :: E
    Real, parameter ::
    h=6.6260755D-34
    Real, parameter :: c=2.99792458D8
    Real, parameter :: kb=1.38D-23
    Real :: T
    T = 3000
    OPEN (Unit = 8, File = 'cuerpo.dat', Action = 'Write', Status = "New")
    Do l = 1, 5, 0.1
    E=((8*3.14*h*c)/(l**5))*((1)/(EXP((h*c)/(l*kb*T)))-1)
    Write (8,*) l, E
    End Do
    Close (8)
    End Program


    Y una pregunta, ¿como haces para graficar los datos? ¿Es directo del archivo de salida?


    Edicion: Compilo el código, sin errores, pero el archivo final no muestra nada, esta en blanco, seguire checandolo.
    Última edición por Caifan; 22/06/2010, 22:46:46.
    [FONT=times new roman]Primera Ley de Fick[/FONT]

    J_A = -D_{AB} \nabla{C}

    Comentario


    • #3
      Re: Radiacion cuerpo negro

      He intentado muchas cosas, pero nada funciona.

      Compilo sin errores, pero al echar a andar el programa, se cierra inmediatamente... tal vez es demasiado para Fortran. Esperemos que alguien mas nos ayude. Yo tambien uso el Microsoft Power Station 4.0... ¿alguien conoce algo mejor que esto?
      Última edición por Caifan; 23/06/2010, 01:01:01.
      [FONT=times new roman]Primera Ley de Fick[/FONT]

      J_A = -D_{AB} \nabla{C}

      Comentario


      • #4
        Re: Radiacion cuerpo negro

        Disculpa si digo una burrada pues hace muchos años que no programo en Fortran y las nuevas versiones pueden comportarse diferente de lo que yo aprendí, pero en mis tiempos la variable del bucle DO era una variable entera, de manera que poner un incremento de "0.1" generaría varios errores de sintaxis.

        Saludos,

        Al
        Don't wrestle with a pig in the mud. You'll both get dirty, but the pig will enjoy it. - Parafraseando a George Bernard Shaw

        Comentario


        • #5
          Re: Radiacion cuerpo negro

          Recuerdo que en mi segundo examen de Fortran se trataba de una viga que salia de una pared y mantenia una masa clogando en su extremo, esta era mantenida estática por medio de una cuerda cuya tension estaba dada por una funcion dependiente de la masa y de el punto de la viga donde se "amarrara". Debiamos encontrar el punto donde "amarrarla" a la viga que generara la menor tension en la cuerda usando Fortran, con un grado de exactitud de 1 decimal, para el código debiamos usar un ciclo DO con ese mismo incremento, 0.1.
          [FONT=times new roman]Primera Ley de Fick[/FONT]

          J_A = -D_{AB} \nabla{C}

          Comentario


          • #6
            Re: Radiacion cuerpo negro

            Escrito por Caifan Ver mensaje
            Recuerdo que en mi segundo examen de Fortran se trataba de una viga que salia de una pared y mantenia una masa clogando en su extremo, esta era mantenida estática por medio de una cuerda cuya tension estaba dada por una funcion dependiente de la masa y de el punto de la viga donde se "amarrara". Debiamos encontrar el punto donde "amarrarla" a la viga que generara la menor tension en la cuerda usando Fortran, con un grado de exactitud de 1 decimal, para el código debiamos usar un ciclo DO con ese mismo incremento, 0.1.
            No te lo voy a discutir... como dije en mi mensaje, hace muchos años que no programo en Fortran y supongo que el lenguaje habrá evolucionado. Hasta la última vez que hice un programa en Fortran, el índice de una instrucción DO, así como los valores inicial, final e incremento debían ser enteros.

            Se me ocurre preguntarte si también se abolió la definición de tipo implícita. En aquellos viejos tiempos, toda variable no declarada era implícitamente definida como entera si su nombre empezaba con una de las leras I, J, K, L, M o N.

            Saludos,

            Al
            Don't wrestle with a pig in the mud. You'll both get dirty, but the pig will enjoy it. - Parafraseando a George Bernard Shaw

            Comentario


            • #7
              Re: Radiacion cuerpo negro

              Esto demuestra que la experiencia es algo insustituible.

              Pues resulta que se nos olvido el Implicit None, y por eso no ha salido el programa. Aquí esta el código, ya compile y me da un archivo con datos:

              Program cuerpo
              Implicit none
              Real*8 :: E
              Real*8, parameter :: h=6.6260755D-34
              Real*8, parameter :: c=2.99792458D8
              Real*8, parameter :: kb=1.38D-23
              Real :: T, l
              T = 3000
              OPEN (Unit = 8, File = 'cuerpo.dat', Action = 'Write', Status = "New")
              Do l = 1, 5, 0.1
              E=((8*3.14*h*c)/(l**5))*((1)/(EXP((h*c)/(l*kb*T)))-1)
              Write (8,*) l, E
              End Do
              Close (8)
              End Program

              El código esta resuelto, pero ahora continua mi duda: ¿como hacemos para graficar los datos directamente del archivo?
              Última edición por Caifan; 23/06/2010, 06:33:06.
              [FONT=times new roman]Primera Ley de Fick[/FONT]

              J_A = -D_{AB} \nabla{C}

              Comentario


              • #8
                Radiacion cuerpo negro

                Saludos amigos, hice algunas cositas más al programita además de sus tan acertadas sugerencias, me quedó asi

                Program cuerpo
                Implicit none
                Real*8 :: E
                Real*8, parameter :: h=6.6260755D-34
                Real*8, parameter :: c=2.99792458D8
                Real*8, parameter :: kb=1.38D-23
                Real*8, parameter :: g=1.0D-30
                Real*8, parameter :: z=1.0D-6
                Real :: T, l
                T = 3000
                OPEN (Unit = 8, File = 'cuerpo.dat', Action = 'Write', Status = "New")
                Do l = 0.1, 5, 0.001
                E=((8*3.14*h*c)/(g*l**5))*((1)/(EXP((h*c)/(l*kb*T*z))-1))
                Write (8,*) l, E
                End Do
                Close (8)
                End Program


                Introduje unas exponeciales de 10 para ver en el eje x la longitud de onda expresada en micrometros. Compiló y ejecutó correstamente. Luego grafiqué el archivo cuerpo.dat en Gnuplot y obtuve ésta gráfica....
                Haz clic en la imagen para ampliar

Nombre:	Dibujo.jpg
Vitas:	1
Tamaño:	27,9 KB
ID:	299983

                Probaré luego con otras temperaturas y superpondré las respectivas gráficas, ya debería salir todo bonito....Tengo q hacer otras cosas. Luego aviso q tal me fue. Gracias a todos.

                Comentario

                Contenido relacionado

                Colapsar

                Trabajando...
                X