Ir para conteúdo
Fórum Script Brasil
  • 0

Fortran


bporto

Pergunta

Olá! Meu primeiro post nesse fórum.

Estou tendo um p... problema pra resolver o trabalho final de COMPUTAÇAO.

Oscilador X 3 Amortecido

Considere um movimento oscilatório governado por uma equação do tipo:

m.d²x/dt² = -kx -bv +ax³;

onde m é a massa e k; a e b são coe…cientes constantes. O termode amortecimento bv corresponde a uma força dissipativa, devido à resistência do ar.

Neste caso, o movimento será ainda limitado e periódico, mas não harmônico simples. Movimentos deste tipo são chamados movimentos anarmônicos. As

equações de movimento serão dadas por

dx/dt = v

e

dv/dt = -x.k/m - v.b/m + .a/m

Resolva as duas equações acima, usando o método de Euler. O arquivo de

saída deverá ter três colunas t; x; v:

NÃO CONSIGO APLICAR O MÉTODO EM PROGRAMAÇAO. alguém PODE ME AJUDAR? TO DISPOSTO A PAGAR POR ESSA SOLUÇÃO MESMO porque JÁ FIZ 3x ESSA MALDITA MATÉRIA QUE não SERVE DE NADA PRO MEU CURSO.

ACHEI ISSO SOBRE O METODO.

Solution in Fortran

Euler's Method

The Fortran solution to this problem will of course take some more efford. You should write a program or better yet a procedure that uses the Euler method to integrate a first order IVP of the form [*]. Assume that the function $\vec{f}$ already exists and will be passed as an argument along with number of unknowns n_unknowns in the dependent variable $\vec{y}$ (in our case this is 6--3 coordinates and 3 velocities), the number of time steps n_points to take and output the solution at, the initial conditions x0 and y0, as well as the step size dx:

MODULE IVPSolve

USE Precision

...

SUBROUTINE Euler(f,y,n_unknowns,n_points,dx,x0,y0)

! The function f is passed as an argument:

INTERFACE

SUBROUTINE f(x,y,y_prime,n_unknowns)

USE Precision

INTEGER n_points

REAL(KIND=wp) :: x

REAL(KIND=wp), DIMENSION(n_unknowns) :: y, y_prime

END SUBROUTINE f

END INTERFACE

INTEGER :: n_unknowns,n_points

! Upon exit, this array should contain the solution

REAL(KIND=wp), DIMENSION(n_unknowns,n_points) :: y

REAL(KIND=wp) :: dx, x0 ! Step size and initial x

REAL(KIND=wp), DIMENSION(n_unknowns) :: y0 ! Initial y

...

...Declare any needed local variables here...

...Initialize variables for the DO loop...

DO i=1,n_points-1

...Calculate x here in steps of dx starting at x0...

CALL f(x,y(:,i),y_prime,n_unknowns)

y(:,i+1)=y(:,i)+y_prime*dx ! Euler's method

...

END DO

...

END SUBROUTINE Euler

END MODULE IVPSolve

Feel free to use any other approach. There is ample room for improvement in the above scheme. For example, why output the solution at every time step, and not every desired n_output steps? This will save on storage, especially if n_points is very large. Also, those that feel up to it can try coding a more sophisticated algorithm, such as Runge-Kutta and ask for assistance if needed (you can use the file RK4.f90 as a template).

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...